def point_on_segment(px, py, x1, y1, x2, y2):
    """检查点(px,py)是否在线段(x1,y1)-(x2,y2)上"""
    # 检查点是否在线段的边界框内
    if min(x1, x2) <= px <= max(x1, x2) and min(y1, y2) <= py <= max(y1, y2):
        # 检查点是否在线段上（共线且在线段范围内）
        cross_product = (px - x1) * (y2 - y1) - (py - y1) * (x2 - x1)
        if abs(cross_product) < 1e-10:  # 考虑浮点精度
            return True
    return False

def is_point_in_polygon(px, py, polygon):
    """使用射线法判断点是否在多边形内部"""
    n = len(polygon)
    inside = False
    
    for i in range(n):
        x1, y1 = polygon[i]
        x2, y2 = polygon[(i + 1) % n]
        
        # 检查点是否在边上
        if point_on_segment(px, py, x1, y1, x2, y2):
            return 1  # 点在边上
        
        # 检查射线与边的交点
        if ((y1 > py) != (y2 > py)):  # 点在线段的两侧
            if x1 == x2:  # 垂直线段
                intersect_x = x1
            else:
                # 计算交点x坐标
                intersect_x = x1 + (py - y1) * (x2 - x1) / (y2 - y1)
            
            if px <= intersect_x:
                inside = not inside
    
    return 1 if inside else 0

def is_valid_quadrilateral(points):
    """检查四个点是否能构成有效的四边形区域"""
    # 检查是否有重复点
    if len(set(points)) < 4:
        return False
    
    # 检查是否共线（三点共线会导致退化）
    for i in range(4):
        x1, y1 = points[i]
        x2, y2 = points[(i + 1) % 4]
        x3, y3 = points[(i + 2) % 4]
        
        # 计算叉积判断是否共线
        cross_product = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)
        if abs(cross_product) < 1e-10:  # 考虑浮点精度
            return False
    
    return True

def check_point_in_quadrilateral(input_data):
    """主函数：判断点是否在四边形内部"""
    # 解析输入数据
    if len(input_data) != 10:
        return -1
    
    # 提取四个顶点和一个待查询点
    points = []
    for i in range(0, 8, 2):
        points.append((input_data[i], input_data[i+1]))
    
    query_point = (input_data[8], input_data[9])
    
    # 检查四边形是否有效
    if not is_valid_quadrilateral(points):
        # 无法构成区域，检查点是否在边或顶点上
        for i in range(4):
            x1, y1 = points[i]
            # 检查是否在顶点上
            if abs(query_point[0] - x1) < 1e-10 and abs(query_point[1] - y1) < 1e-10:
                return 1
            
            # 检查是否在边上
            x2, y2 = points[(i + 1) % 4]
            if point_on_segment(query_point[0], query_point[1], x1, y1, x2, y2):
                return 1
        
        return -1  # 无法构成区域且点不在边/顶点上
    
    # 有效四边形，使用射线法判断
    return is_point_in_polygon(query_point[0], query_point[1], points)

# 测试示例
if __name__ == "__main__":
    # 测试数据：凸四边形，点在内部
    test_data1 = [0.0, 0.0, 4.0, 0.0, 4.0, 4.5, 0.0, 4.5, 2.5, 2.5]
    result1 = check_point_in_quadrilateral(test_data1)
    print(f"测试1结果: {result1}")  # 应该输出1（点在内部）
    
    # 测试数据：点在外部
    test_data2 = [0.0, 0.0, 4.0, 0.0, 4.0, 4.5, 0.0, 4.5, 5.0, 5.0]
    result2 = check_point_in_quadrilateral(test_data2)
    print(f"测试2结果: {result2}")  # 应该输出0（点在外部）
    
    # 测试数据：退化情况（三点共线）
    test_data3 = [0.0, 0.0, 2.0, 0.0, 4.0, 0.0, 0.0, 4.5, 2.0, 0.0]
    result3 = check_point_in_quadrilateral(test_data3)
    print(f"测试3结果: {result3}")  # 应该输出1（点在边上）
    
    # 测试数据：点在顶点上
    test_data4 = [0.0, 0.0, 4.0, 0.0, 4.0, 4.5, 0.0, 4.5, 0.0, 0.0]
    result4 = check_point_in_quadrilateral(test_data4)
    print(f"测试4结果: {result4}")  # 应该输出1（点在顶点上）